package threadTest.auxiliaryUtils;

import java.util.concurrent.Semaphore;

/**
 * 功能描述: Semaphore 通常用于限制可以访问某些资源（物理或逻辑的）的线程数目。
 * 2024/02/22
 * <p>
 * ZhangYi
 */
public class SemaphoreTest {

    public static void main(String[] args) {
        int num =3 ;
        Semaphore semaphore = new Semaphore(num); // 初始化3 个信号量, 满了 就等待, 直到有空位置, 再执行

        for (int i = 0; i < 10; i++) {
            new Thread(()->{
                try {
                    semaphore.acquire(); // 信号量减1
                    System.out.println(Thread.currentThread().getName() + "获取到信号量");
                    Thread.sleep(1000);
                    semaphore.release(); // 信号量加1
                    System.out.println(Thread.currentThread().getName() + "释放信号量");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }).start();
        }
    }
}
